#include <stdio.h>
#include <malloc.h>
#include "liqueue.h"

void InitQueue(LiQueue *&q)  //初始化链队
{
    q=(LiQueue *)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}
void DestroyQueue(LiQueue *&q)  //销毁链队
{
    
    QNode * pre=q->front,*p;
    if(pre!=NULL){
        p=pre->next;
        while(p!=NULL){
            free(pre);
            pre=p;p=p->next;
        }
        free(pre);
    }
    free(q);
}
bool QueueEmpty(LiQueue *q)  //判断链队是否为空
{
    return(q->rear==NULL);
}
int QueueLength(LiQueue *q)  //返回队列中数据元素个数
{
    int n=0;
    QNode *p=q->front;
    while (p!=NULL)
    {
        n++;
        p=p->next;
    }
    return(n);
}
void enQueue(LiQueue *&q,ElemType e)  //入队
{
   QNode *p;
   p=(QNode *)malloc(sizeof(QNode));
   p->data=e;
   p->next=NULL;
   if(q->rear==NULL)
        q->front=q->rear=p;
   else{
       q->rear->next=p;
       q->rear=p;
   }
//    return true;

}
bool deQueue(LiQueue *&q,ElemType &e){
    QNode *t;
    if(q->rear==NULL)
        return false;
    t=q->front;
    if(q->front==q->rear)
        q->front=q->rear=NULL;
    else
        q->front=q->front->next;
    e=t->data;
    free(t);
    return true;
}   //出队


void dispQueue(LiQueue *&q)
{
    QNode *p = q->front; 
    while (p != NULL) { 
        printf("%c ", p->data); 
        p = p->next; 
    }
    printf("\n"); 
}

void outQueue(LiQueue *&q) // 全部出队
{
    char e;

    while(deQueue(q, e)) {
        printf("%c ", e);
    }

    printf("\n出队完毕！\n");
}
